博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在java程序中实现发送邮件的功能
阅读量:5845 次
发布时间:2019-06-18

本文共 7335 字,大约阅读时间需要 24 分钟。

最近比较忙,在做一个人事管理系统的项目,在这项目需求中,需要一个发送邮件的功能。这个时候我们可以使用javamail的jar包来实现完美需要的功能,在这里简单的分享一个最基础的发邮件功能。

首先我们需要去下载两个jar包,smtp.jar和mailapi.jar,导入到自己的项目中应该就不用我说了吧,大家都是有经验的开发人员了微笑

public class Demo1 {		public static void main(String[] args) throws Exception{		// TODO Auto-generated method stub		Properties props = new Properties();		props.setProperty("mail.smtp.auth", "true");		props.setProperty("mail.transport.protocol", "smtp");		Session session = Session.getInstance(props);		session.setDebug(true);				Message msg = new MimeMessage(session);		msg.setText("邮件测试");		msg.setFrom(new InternetAddress("你的邮箱号"));			Transport transport = session.getTransport();		transport.connect("邮箱驱动", 25, "邮箱账号", "邮箱密码");		transport.sendMessage(msg,				new Address[]{new InternetAddress("对方的邮箱号")});		transport.close();	}}
这样就可以实现一个很简单的发邮件的功能,至于其他的高级功能的话可以下载我提供的这个文件去看,有非常详细的演示代码!

我这里用的驱动是阿里云的,有的是可以使用使用搜狐或者163邮箱的也都是可以了!

如果想做一些其它的功能的话可以利用邮箱找回密码,大致就是在你建表的时候要加上一个时间标志以及过期时间。

package com.soq.card.web.action;import java.sql.Timestamp;import java.util.List;import java.util.UUID;import org.hibernate.Criteria;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.criterion.Restrictions;import org.springframework.orm.hibernate3.HibernateTemplate;import com.soq.card.biz.UserHander;import com.soq.card.entity.Users;import com.soq.card.tools.DBhepler;import com.soq.card.tools.Mail;import com.soq.card.tools.Md5;import com.soq.card.web.base.BaseAction;/** * @author javen * @Email zyw205@gmail.com *  */public class PassEmailAction extends BaseAction {    private Users users;    private UserHander userHander;    private String email;    private String sid;    private String userName;        public String sendmail() {        try {            HibernateTemplate ht = this.getUserHander().getUsersDAO().getHibernateTemplate();            SessionFactory factory = ht.getSessionFactory();            Session session = factory.openSession();            Criteria criteria = session.createCriteria(Users.class);            criteria.add(Restrictions.eq("loginName", email));            List
list = criteria.list(); if (list.size() > 0) { users=list.get(0); Mail mail = new Mail(); String secretKey = UUID.randomUUID().toString(); // 密钥 Timestamp outDate = new Timestamp(System.currentTimeMillis() + 30 * 60 * 1000);// 30分钟后过期 long date = outDate.getTime() / 1000 * 1000;// 忽略毫秒数 mySql 取出时间是忽略毫秒数的 DBhepler bhepler=new DBhepler(); String sql="update users set outDate=?,validataCode=? where loginName=?;"; String str[] ={outDate+"",secretKey,users.getLoginName()}; bhepler.AddU(sql, str); //this.getUserHander().getUsersDAO().getHibernateTemplate().update(users); // 保存到数据库 System.out.println(" UserName>>>> "+users.getUserName()); String key =users.getUserName() + "$" + date + "$" + secretKey; System.out.println(" key>>>"+key); String digitalSignature = Md5.md5(key);// 数字签名 String path = this.getRequest().getContextPath(); String basePath = this.getRequest().getScheme() + "://" + this.getRequest().getServerName() + ":" + this.getRequest().getServerPort() + path + "/"; String resetPassHref = basePath + "checkLink?sid=" + digitalSignature +"&userName="+users.getUserName(); String emailContent = "请勿回复本邮件.点击下面的链接,重设密码
" + resetPassHref + " 或者
点击我重新设置密码" + "
tips:本邮件超过30分钟,链接将会失效,需要重新申请'找回密码'" + key + "\t" + digitalSignature; mail.setTo(email); mail.setFrom("XX");// 你的邮箱 mail.setHost("smtp.163.com"); mail.setUsername("XXX@163.com");// 用户 mail.setPassword("CXXX");// 密码 mail.setSubject("[二维码名片]找回您的账户密码"); mail.setContent(emailContent); if (mail.sendMail()) { System.out.println(" 发送成功"); this.getRequest().setAttribute("mesg", "重置密码邮件已经发送,请登陆邮箱进行重置!"); return "sendMail"; } } else { this.getRequest().setAttribute("mesg", "用户名不存在,你不会忘记邮箱了吧?"); return "noUser"; } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } return null; } public String checkResetLink() { System.out.println("sid>>>" + sid); if (sid.equals("") || userName.equals("")) { this.getRequest().setAttribute("mesg", "链接不完整,请重新生成"); System.out.println(">>>>> null"); return "error"; } HibernateTemplate ht = this.getUserHander().getUsersDAO().getHibernateTemplate(); SessionFactory factory = ht.getSessionFactory(); Session session = factory.openSession(); Criteria criteria = session.createCriteria(Users.class); criteria.add(Restrictions.eq("userName", userName)); List
list = criteria.list(); if (list.size()>0) { users=list.get(0); Timestamp outDate = (Timestamp) users.getOutDate(); System.out.println("outDate>>>"+outDate); if(outDate.getTime() <= System.currentTimeMillis()){ //表示已经过期 this.getRequest().setAttribute("mesg", "链接已经过期,请重新申请找回密码."); System.out.println("时间 超时"); return "error"; } String key = users.getUserName()+"$"+outDate.getTime()/1000*1000+"$"+users.getValidataCode();//数字签名 System.out.println("key link》》"+key); String digitalSignature = Md5.md5(key);// 数字签名 System.out.println("digitalSignature>>>>"+digitalSignature); if(!digitalSignature.equals(sid)) { this.getRequest().setAttribute("mesg", "链接不正确,是否已经过期了?重新申请吧."); System.out.println("标示不正确"); return "error"; }else { //链接验证通过 转到修改密码页面 this.getRequest().setAttribute("user", users); return "success"; } }else { this.getRequest().setAttribute("mesg", "链接错误,无法找到匹配用户,请重新申请找回密码."); System.out.println("用户不存在"); return "error"; } } public Users getUsers() { return users; } public void setUsers(Users users) { this.users = users; } public UserHander getUserHander() { return userHander; } public void setUserHander(UserHander userHander) { this.userHander = userHander; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getSid() { return sid; } public void setSid(String sid) { this.sid = sid; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; }}
下载地址: http://download.csdn.net/detail/sdksdk0/9519659

你可能感兴趣的文章
我心中的核心组件(可插拔的AOP)~调度组件quartz.net
查看>>
Linq实体类的设计(解决了复合查询的问题,同时解决了LINQ上下文缓存问题)...
查看>>
NPOI excel读取转datatabel excel日期格式处理
查看>>
Android Spinner级联菜单实现
查看>>
React入门
查看>>
php简单实用的验证码生成类
查看>>
leetcode Intersection of Two Linked Lists
查看>>
云计算浅谈
查看>>
PyQt5学习笔记1-安装PyQt5
查看>>
如何安装mariadb服务器和解决 can't connect to local mysql server through socket...
查看>>
12月3日站立会议
查看>>
CSS3 修改和去除移动端点击事件出现的背景框 (tap-highlight-color)
查看>>
form表单直接传文件
查看>>
集合框架综述
查看>>
解决ReSharper自动删除换行
查看>>
21window_21_Dynamic_library动态库
查看>>
DB2 v9.1 RACF 瞎学笔记
查看>>
根据两点间的经纬度计算距离
查看>>
PHP常用的文件操作函数集锦
查看>>
基于OpenCV的图像几何变换算法
查看>>